package com.yyds.service.impl;

import com.github.pagehelper.PageHelper;
import com.yyds.common.MyJSON;
import com.yyds.common.R;
import com.yyds.mapper.NewsNewsMapper;
import com.yyds.pojo.NewsNews;
import com.yyds.service.NewsNewsService;
import com.yyds.vo.NewsNewsGraphPieVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.stream.Collectors;

/**
 * selectAllNewsNewsService()方法为分页+模糊查询方法
 * <p>
 * insertNewsNewsService()方法为 添加 新闻方法
 */

@Service("newsNewsService")
@SuppressWarnings({"all"})//抑制警告
public class NewsNewsServiceImpl implements NewsNewsService {

    @Autowired
    NewsNewsMapper newsNewsMapper;//DI自动注入

    public void setNewsNewsMapper(NewsNewsMapper newsNewsMapper) {
        this.newsNewsMapper = newsNewsMapper;
    }


    /**
     * @param newsNews 查询条件
     * @param page     当前页
     * @param limit    本页数据量
     * @return 返回
     */
    @Override
    public MyJSON<NewsNews> selectAllNewsNewsService(NewsNews newsNews, Integer page, Integer limit) {
        System.out.println("通过分页查询新闻模块的新闻的全部信息 : page= " + page + " , limit= " + limit);
        if(page == 0 || page == null){
            page = 1;
        }
        if(limit == 0 || limit == null){
            limit = 10;
        }
        //总数据条数
        int count = newsNewsMapper.findNewsNews(newsNews).size();
        PageHelper.startPage(page, limit);
        //分页后的数据
        List<NewsNews> list = newsNewsMapper.findNewsNews(newsNews);
        MyJSON<NewsNews> newsMyJSON = new MyJSON<>();
        newsMyJSON.setCode(0);
        newsMyJSON.setMsg("success");
        newsMyJSON.setCount((long) count);
        newsMyJSON.setData(list);
        return newsMyJSON;
    }

    /**
     * @param newsNews 封装前端发过来信息的实体类
     * @return 返回成功或失败的信息
     */
    @Override
    public R insertNewsNewsService(NewsNews newsNews) {
        System.out.println("添加新闻模块的新闻的全部信息 : newsNews= " + newsNews);
        if (newsNews.getNews_picture() == null) {
            newsNews.setNews_picture("图片找不到了,请重新上传");
        }
        newsNews.setNews_createtime(new Date());
        int i = newsNewsMapper.insertNewsNewsMapper(newsNews);
        if (i > 0) {
            return R.ok().message("添加成功");
        } else {
            return R.error().message("添加失败");
        }
    }

    /**
     * @param list 得到前端发过来的新闻的信息
     * @return 返回给前端 删除的条数信息
     */
    @Override
    public R deleteAllNewsNewsService(List<NewsNews> list) {
        List<Integer> collect = list.stream()//得到一个流
                .map(NewsNews::getNews_id)//得到所有的id
                .collect(Collectors.toList());//将这些id放到一个 集合中
        //创建一个数组,并遍历存放id的集合,将所有的 数据放到 数组中
        int[] news_ids = new int[collect.size()];
        Iterator<Integer> iterator = collect.iterator();
        for (int i = 0; iterator.hasNext(); i++) {
            news_ids[i] = iterator.next();
        }
        int num = newsNewsMapper.deleteAllNewsNewsMapper(news_ids);
        return R.ok().message("删除了" + num + "条新闻");
    }

    @Override
    public R selectNewsNewsService(Integer news_id) {
        return R.ok().data("news", newsNewsMapper.selectNewsNewsMapper(news_id));
    }

    @Override
    public R updateNewsNewsService(NewsNews newsNews) {
        return R.ok().message("更改" + newsNewsMapper.updateNewsNewsMapper(newsNews) + "条新闻");
    }

    @Override
    public R deleteNewsNewsService(Integer news_id) {
        return R.ok().message("删除了" + newsNewsMapper.deleteNewsNewsMapper(news_id) + "条新闻");
    }

    @Override
    public R queryTypeNewsNewsService() {
        List<NewsNewsGraphPieVo> list = newsNewsMapper.queryTypeNewsNewsMapper()
                .stream()
                .map(n -> {
                    n.setName(n.getName() + "月");
                    return n;
                }).collect(Collectors.toList());
        System.out.println(list);
        return R.ok().data("pie", list);
    }

}
